//package org.emdev.common.archives.rar;
//
//import java.io.File;
//import java.io.FileOutputStream;
//import java.io.IOException;
//import java.io.InputStream;
//import java.util.Arrays;
//
//import org.emdev.BaseDroidApp;
//import org.emdev.common.log.LogContext;
//import org.emdev.common.log.LogManager;
//import org.emdev.utils.FileUtils;
//
//public class UnrarBridge {
//
//    private static final LogContext LCTX = LogManager.root().lctx("Unrar");
//    private static File unrar;
//
//    public static boolean init() {
//        unrar = new File(BaseDroidApp.context.getFilesDir(), "unrar");
//        if (unrar != null && unrar.isFile()) {
//            if (LCTX.isDebugEnabled()) {
//                LCTX.d("Unrar executable found");
//            }
//            return true;
//        }
//
//        if (copy(unrar) && chmod(unrar)) {
//            return true;
//        }
//
//        unrar = null;
//        return false;
//    }
//
//    public static Process exec(final String... args) throws IOException {
//        if (init()) {
//            if (LCTX.isDebugEnabled()) {
//                LCTX.d("Unrar executing: " + Arrays.toString(args));
//            }
//            return execImpl(args);
//        }
//
//        throw new IOException("No unrar executable installed");
//    }
//
//    private static Process execImpl(final String... args) throws IOException {
//        final String[] cmd = new String[1 + args.length];
//        cmd[0] = unrar.getAbsolutePath();
//
//        if (args.length > 0) {
//            System.arraycopy(args, 0, cmd, 1, args.length);
//        }
//        final ProcessBuilder pb = new ProcessBuilder(cmd);
//        pb.redirectErrorStream(false);
//        return pb.start();
//    }
//
//    private static boolean copy(final File unrar) {
//        try {
//            final InputStream source = BaseDroidApp.context.getResources().getAssets().open("unrar/unrar");
//            final FileOutputStream target = new FileOutputStream(unrar);
//            FileUtils.copy(source, target);
//            return true;
//        } catch (final IOException ex) {
//            LCTX.e("Unrar executable cannot be copied from assets: " + ex.getMessage());
//            return false;
//        }
//    }
//
//    private static boolean chmod(final File unrar) {
//        final String[] cmd = { "chmod", "777", unrar.getAbsolutePath() };
//        try {
//            final Process p = Runtime.getRuntime().exec(cmd);
//            final int res = p.waitFor();
//            return 0 == res;
//        } catch (final IOException ex) {
//            LCTX.e("Unrar executable cannot be copied from assets: " + ex.getMessage());
//            return false;
//        } catch (final InterruptedException ex) {
//            Thread.interrupted();
//            return false;
//        }
//    }
//
//}
